# -*- coding: utf-8 -*-

"""剑指 Offer II 004. 只出现一次的数字 
给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

示例 1：
输入：nums = [2,2,3,2]
输出：3

示例 2：
输入：nums = [0,1,0,1,0,1,100]
输出：100 

提示：
1 <= nums.length <= 3 * 104
-231 <= nums[i] <= 231 - 1
nums 中，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次"""

class Solution:
    def singleNumber(self, nums) -> int:
        hashtable = {}
        for n in nums:
            if n in hashtable:
                hashtable[n] += 1
            else:
                hashtable[n] = 1
            
            if hashtable[n] == 3:
                del hashtable[n]
        return set(hashtable.keys()).pop()


if __name__ == '__main__':
    so = Solution()
    print(so.singleNumber([2,2,3,2]))
    print(so.singleNumber([0,1,0,1,0,1,100]))
